package com.wing.sys.service;

import java.util.List;
import java.util.Map;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import com.wing.common.util.GUID;
import com.wing.common.util.PageBean;
import com.wing.sys.dao.RoleDAO;
import com.wing.sys.dao.RoleModuleDao;
import com.wing.sys.dao.RoleUserDao;
import com.wing.sys.domain.Role;
import com.wing.sys.domain.RoleModule;
import com.wing.sys.domain.RoleUser;
@Service
@Transactional
public class RoleManager {
	@Autowired
	private RoleDAO roledao;
	@Autowired
	private RoleUserDao roleUserDao;
	@Autowired
	private RoleModuleDao roleModuleDao;
	
	public List<Map<String,Object>> findAll(){
		return roledao.findAll();	 
	}
	
	public PageBean findPageList(int currentPage, int pageSize, String role_type_id,String siteId) {
		return roledao.findPageList(currentPage, pageSize,role_type_id,siteId);
	}
	
	public Role findById(String id){
		return roledao.findById(id);	 
	}
	
	public void saveRole(Role role){
		if(role.getId() == null ||  "".equals(role.getId())){
			role.setId(new GUID().toString());
			roledao.insert(role);
		}else{
			roledao.update(role);
		}
	}

	public void updateRole(Role role){
		roledao.update(role);
	}
	

	public void deleteRoles(String[] chk) {
		for(int i=0;i<chk.length;i++){
			deleteRole(chk[i]);
		}
	}
	
	private void deleteRole(String roleId){
		//删除与角色的关联关系
		roledao.delete(roleId);
		roleUserDao.deleteRoleUserByRoleId(roleId);
		roleModuleDao.deleteRoleModuleByRoleId(roleId);
	}

	/**
	 * 获取角色下的功能模块
	 * @param currentPage
	 * @param pageSize
	 * @param roleId
	 * @return
	 */
	public PageBean findPageModulesByRoleId(int currentPage, int pageSize,
			String roleId) {
		return roledao.findPageModulesByRoleId(currentPage,pageSize,roleId);
	}

	/**
	 * 获取角色下的用户
	 * @param currentPage
	 * @param pageSize
	 * @param roleId
	 * @return
	 */
	public PageBean findPageUsersByRoleId(int currentPage, int pageSize,
			String roleId) {
		return roledao.findPageUsersByRoleId(currentPage,pageSize,roleId);
	}

	public void addUsersForRole(String[] userarray, String roleId) {
		RoleUser ru = null;
		for(int i=0;i<userarray.length;i++){
			if(userarray[i].trim().equals("")){
				continue;
			}
			ru = new RoleUser();
			ru.setRoleid(roleId);
			ru.setUserid(userarray[i]);
			List list = roleUserDao.findRoleUser(ru);
			if(list.size() == 0){
				ru.setId(new GUID().toString());
				roleUserDao.insert(ru);
			}
		}
	}

	public void deleteUsersForRole(String[] userarray, String roleId) {
		for(int i=0;i<userarray.length;i++){
			roleUserDao.deleteRoleUser(userarray[i],roleId);
		}
	}

	public void addModsForRole(String[] modarray, String roleId) {
		RoleModule rm = null;
		for(int i=0;i<modarray.length;i++){
			if(modarray[i].trim().equals("")){
				continue;
			}
			rm = new RoleModule();
			rm.setRoleid(roleId);
			rm.setModuleid(modarray[i]);
			List list = roleModuleDao.findRoleModule(rm);
			if(list.size() == 0){
				rm.setId(new GUID().toString());
				roleModuleDao.insert(rm);
			}
		}
	}

	public void deleteModsForRole(String[] modarray, String roleId) {
		for(int i=0;i<modarray.length;i++){
			roleModuleDao.deleteRoleModule(modarray[i],roleId);
		}
	}

	public PageBean findPageOrgsByRoleId(int currentPage, int pageSize,
			String roleId) {
		return roledao.findPageOrgsByRoleId(currentPage,pageSize,roleId);
	}
	
}
